package com.prototype.shallow;

/**
 * 孙大圣本人用TheGreatestSage类代表
 * 
 * @author Administrator
 *
 */
public class TheGreatestSage {

	private Monkey monkey = new Monkey();

	public void change() {
		// 克隆大圣本尊
		Monkey copyMonkey = (Monkey) monkey.clone();
		System.out.println("大圣本尊的生日是：" + monkey.getBirthDate());
		System.out.println("克隆的大圣的生日是：" + monkey.getBirthDate());
		System.out.println("大圣本尊跟克隆的大圣是否为同一个对象 " + (monkey == copyMonkey));
		System.out.println("大圣本尊持有的金箍棒 跟 克隆的大圣持有的金箍棒是否为同一个对象？ "
				+ (monkey.getStaff() == copyMonkey.getStaff()));
	}

	/**
	 * 可以看出，首先，复制的大圣本尊具有和原始的大圣本尊对象一样的birthDate，而本尊对象不相等，这表明他们二者是克隆关系；其次，
	 * 复制的大圣本尊所持有的金箍棒和原始的大圣本尊所持有的金箍棒为同一个对象。这表明二者所持有的金箍棒根本是一根，而不是两根。
	 * 
	 * 　　正如前面所述，继承自java.lang.Object类的clone()方法是浅克隆。换言之，
	 * 齐天大圣的所有化身所持有的金箍棒引用全都是指向一个对象的，这与《西游记》中的描写并不一致。要纠正这一点，就需要考虑使用深克隆。
	 * 
	 * @param args
	 */
	// 当运行TheGreatestSage类时，首先创建大圣本尊对象，而后浅度克隆大圣本尊对象。程序在运行时打印出的信息如下：
	public static void main(String[] args) {
		TheGreatestSage sage = new TheGreatestSage();
		sage.change();
	}

}
